// @Author yang
// @Description 
// @Date 2021/7/16
// @Time 9:05

// +build linux

package commands

import (
	"fmt"
	"os/exec"
	"strings"
)

type Cmd struct {}

func NewCmd() (*Cmd) {
	return &Cmd{}
}

// 同步执行, 每个命令都进行拆分, 所有可运行文件都可执行
func (this *Cmd) Execute(cmdStr string) (string, error) {
	cmdStr = strings.TrimSpace(cmdStr)

	split := strings.Split(cmdStr, " ")
	var command *exec.Cmd
	if len(split) > 1 {
		command = exec.Command(split[0], split[1:]...)
	} else {
		command = exec.Command(cmdStr)
	}

	// 执行
	output, err := command.Output()
	if err != nil {
		fmt.Println("=====> ExecuteCmdstr 错啦", err)
		return "", err
	}

	return outputStr,nil
}

// 只能执行系统脚本命令, 可运行文件不能执行
func (this *Cmd) ExecuteCmdstr(cmdStr string) (string, error){
	cmdStr = strings.TrimSpace(cmdStr)

	var command *exec.Cmd

	command = exec.Command("bash", "-c", cmdStr)

	// 执行
	output, err := command.Output()
	if err != nil {
		fmt.Println("=====> ExecuteCmdstr 错啦", err)
		return "", err
	}

	return outputStr,nil
}

// 异步执行脚本命令, 异步方法在命令找不到时报错, 执行结果错误不会抛出, 更多的是可执行文件查找错误
func (this *Cmd) ExecuteAsync(cmdStr string) error{
	commandStr := strings.TrimSpace(cmdStr)

	split := strings.Split(commandStr, " ")
	var command *exec.Cmd
	if len(split) > 1 {
		command = exec.Command(split[0], split[1:]...)
	} else {
		command = exec.Command(commandStr)
	}

	err := command.Start()
	if err != nil {
		fmt.Println("=====> 错啦", err)
		return err
	}

	return nil
}

// 异步执行脚本命令, 异步方法在命令找不到时报错, 执行结果错误不会抛出, 更多的是可执行文件查找错误
func (this *Cmd) ExecuteCmdstrAsync(cmdStr string) error {
	cmdStr = strings.TrimSpace(cmdStr)

	command = exec.Command("bash", "-c", cmdStr)

	err := command.Start()
	if err != nil {
		fmt.Println("=====> 错啦", err)
		return err
	}

	return nil
}
